#ifndef _CONTROLRPCSERVER_H_
#define _CONTROLRPCSERVER_H_

#include "ControlRPC.h"

#include <list>
#include <set>
#include <map>
#include "Cola.h"
#include "mensajes/Mensaje.h"
#include "ListaUsuarios.h"

class ControlRPCServer:public ControlRPC{
    private:
    std::set<long> usuariosConectados;
    std::map<long, std::set<long> > conversaciones;
    long proximoIdConversacion;
    Cola colaNotificador;
    ListaUsuarios listaUsuarios;

    void lanzarNotificador();

    public:
    ControlRPCServer();
    virtual int iniciarSesion(long idUsuario);
    virtual void cerrarSesion(long idUsuario);
    virtual lista obtenerParticipantesConversacion(long idConversacion);
    virtual lista obtenerListaConversaciones();
    virtual int unirseAConversacion(long idUsuario, long idConversacion);
    virtual void abandonarConversacion(long idUsuario, long idConversacion);
    void notificar(long idUsuario, MensajeControl &m);
    virtual ~ControlRPCServer();
};

#endif /* _CONTROLRPCSERVER_H_ */
